package com.foreknow.demo12;

/**
 * @author shkstart
 * @create 2021-07-30 10:11
 */

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 集合(容器)
 * Collection接口用来存放一组称为元素的对象，一个Collection中可以放不同类型的数据，它是Set接口和List接口的父接口。其中元素是否有特定的顺序以及是否允许重复，取决于它的实现类。
 * (1) 子接口Set：无序的集合，不允许重复。
 * Set接口的实现类：HashSet
 * (2) 子接口List：有序的集合，允许重复。
 * List接口的实现类：ArrayList、LinkedList
 * <p>
 * ArrayList中常用的方法
 * boolean add(E e) 将指定的元素添加到此列表的尾部。
 * E get(int index)   返回此列表中指定位置上的元素。
 * int  size() 返回此列表中的元素数
 * E remove(int index)  移除此列表中指定位置上的元素。
 */
public class CollectionDemo {
    public void m1(List<Student> studnets) {
        for (Student stu : studnets
        ) {
            System.out.println(stu.getId());
        }
    }

    public List<Student> m2(List<Student> students){
        return students;
    }


    public static void main(String[] args) {


        Student s1 = new Student();
        s1.setId("1001");
        s1.setAge(20);
        s1.setName("tom");
        Student s2 = new Student();
        s2.setId("1002");
        s2.setAge(30);
        s2.setName("tom2");
        //创建一个list集合
        //可以使用泛型来约束集合中的元素的类型
        List<Student> list1 = new ArrayList<>();
        List<String> list = new ArrayList<String>();  //定义泛型时前面的<>要写  后面可以不写
        //向集合中添加元素      集合中只能添加对象（Object）
//        list.add(1);    //基本数据类型自动装箱  包装类对象
        list.add("tom");
//        list.add(3.14);
//        list.add(true);
        list1.add(s1);
        list1.add(s2);
        //从集合中获取元素(Student对象)
        //集合加上泛型就可以不用强转
        Student stu1 = list1.get(0);
        Student stu2 = list1.get(1);
        System.out.println(list1.get(0).toString());
        System.out.println(list1.get(1).toString());
        System.out.println("************************");
        //遍历集合
        for (int i = 0; i < list1.size(); i++) {
            System.out.println(list1.get(i).toString());
        }

        System.out.println("---------------------");
        //foreach

        for (Student arr : list1) {
            System.out.println(arr);
        }

        System.out.println("************************");
        CollectionDemo collectionDemo=new CollectionDemo();
        collectionDemo.m1(list1);
        System.out.println("*************************");
        List<Student> m2stu = collectionDemo.m2(list1);
        for (Student msst:m2stu
             ) {
            System.out.println(msst.getId());
        }

        System.out.println("-----------迭代器-------------------");
        //迭代器(Iterator)
        Iterator<Student> iterator = list1.iterator();
        while (iterator.hasNext()){
            Student student=iterator.next();
            System.out.println(student.getName());
        }


        List<Student> list2=new ArrayList<>();
        boolean isRight=list1.remove(s1);    //remove(对象)
//        list1.remove(0);//remove(角标)
        if(isRight){
            System.out.println("删除后");
            collectionDemo.m1(list1);
        }




    }
}
